package com.errol.generic.file.excel.pojo;

import com.renjia.service.generic.file.core.pojo.FileResolvedCode;
import org.springframework.lang.Nullable;

import java.util.List;

/**
 * Created by Errol1017 on 2018/6/13.
 * 解析 excel 的返回值
 *
 * @author zhang xiao bin
 * @version v1.0
 * @date 2020/10/21
 * @since v4.7.6
 */
public class ExcelResolved<R> {

    /**
     * 状态码，具体请查看 {@link FileResolvedCode}
     * {@link FileResolvedCode#OK} 表示 excel 数据结构正确，解析成功，此时 {@link #values} 不为 null，但 size 可能为 0，{@link #errorFilename} 可能为 null
     * 否则表示验证未通过，未执行解析，此时 {@link #values} 为 null，{@link #errorFilename} 为 null
     */
    private FileResolvedCode code;
    /**
     * 状态码补充信息，无信息则为 null
     */
    private String message;
    /**
     * 数据格式正确且通过了 Hibernate Validator 验证的 excel 行数据，并映射为 {@link R} 对象
     */
    private List<R> values;
    /**
     * excel 数据结构正确，但 数据格式错误或未通过 Hibernate Validator 验证的 excel 行数据，生成错误文件并返回相对路径
     * 无错误则该字段为 null
     */
    private String errorFilename;

    public ExcelResolved(FileResolvedCode code) {
        this.code = code;
    }

    public ExcelResolved(FileResolvedCode code, String message) {
        this.code = code;
        this.message = message;
    }

    public ExcelResolved(List<R> values, String errorFilename) {
        this.code = FileResolvedCode.OK;
        this.values = values;
        this.errorFilename = errorFilename;
    }

    public FileResolvedCode getCode() {
        return code;
    }

    @Nullable
    public String getMessage() {
        return message;
    }

    @Nullable
    public List<R> getValues() {
        return values;
    }

    @Nullable
    public String getErrorFilename() {
        return errorFilename;
    }
}
